package io.itit.ecp.admin.server.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import icu.mhb.mybatisplus.plugln.base.service.JoinIService;
import io.itit.ecp.admin.server.entity.EnergyDataEntity;
import io.itit.ecp.admin.server.entity.extend.EnergyDataExtEntity;
import io.itit.grass.common.server.dto.ParamDto;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *
 * @Author：Roy
 * @Description：能源数据服务类
 * @Date：Create by 2023-12-05 11:48:22
 */
public interface IEnergyDataService extends JoinIService<EnergyDataEntity> {

    EnergyDataExtEntity sum(ParamDto dto);

    /**
     * 总计量值
     */
    EnergyDataExtEntity sumMeterValue(ParamDto dto);

    EnergyDataExtEntity sumCarbonEmission(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupEnergyType(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupEnergyTypeAndScene(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupReadMeterTypeAndScene(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupScene(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupSolidifyDate(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupSolidifyDateAndEnergyType(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupSolidifyDateAndReadMeterType(ParamDto dto);

    List<EnergyDataExtEntity> sumGroupReadMeterType(ParamDto dto);

    /**
     * 设备计量统计
     */
    IPage<EnergyDataExtEntity> deviceMeterStatistics(ParamDto dto, Page<EnergyDataExtEntity> page);

    List<EnergyDataExtEntity> deviceMeterExport(ParamDto dto);


    /**
     * 公司计量统计
     */
    IPage<EnergyDataExtEntity> companyMeterStatistics(ParamDto dto, Page<EnergyDataExtEntity> page);

    List<EnergyDataExtEntity> companyMeterExport(ParamDto dto);

    /**
     * 项目计量统计
     */
    IPage<EnergyDataExtEntity> projectMeterStatistics(ParamDto dto, Page<EnergyDataExtEntity> page);

    List<EnergyDataExtEntity> projecMeterExport(ParamDto dto);

    /**
     * 碳排/碳减因子值更新时同步重新计算相关联能源数据
     *
     * @param isCarbonEmission 是否碳排因子(为否则是碳减因子)
     * @param energyTypeId     能源类型Id
     * @param solidifyDate     数据日期
     * @param factor           因子值
     * @return
     */
    boolean causeFactorUpdate(boolean isCarbonEmission, String energyTypeId, Date solidifyDate, BigDecimal factor);

    void updateByEnergyTypeId(String energyTypeId, String rangeId, String energyCategory, String energyUnit);
}
